package demo1;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:张熳
 * Date:2025-08-27
 * Time:18:01
 */
//抽象类

public class Test {
    public static void draw(Shape shape){
        shape.draw();
    }
    public static void main(String[] args) {
        draw(new Cycle()); //匿名对象,只能使用一次，意味着如果想要多次调用，只能多次创建对象
        draw(new Cycle());
        draw(new Flower());
        draw(new Flower());

        Cycle cycle = new Cycle();//如果我们实例化一个子类对象，想要多次调用，调用的都是同一个对象，但是可以多次使用
        draw(cycle);
        draw(cycle);
    }

    //drawMap方法的参数是Shape类型，这意味着它可以接受任何Shape子类的实例
    //当调用drawMap时，实际传递的是具体子类（如Cycle或Flower）的实例
    //因此，shape.draw()会调用具体子类的实现，这是多态的体现
    public static void drawMap(Shape shape){
        shape.draw();
    }
    public static void main2(String[] args) {
        //在main方法中直接使用的问题：
        //Shape shape;只是声明了一个引用变量，但没有指向任何对象
        //shape.draw();试图调用一个空引用的方法，会导致NullPointerException
        //即使不是空引用，也不能 直接创建 抽象类 的实例Shape shape = new Shape(),会在编译时报错
        Shape shape;
        //shape.draw();
    }
    public static void main1(String[] args) {
        //抽象类不能直接实例化对象
        //Shape shape = new Shape();

        Cycle cycle = new Cycle();
        Flower flower = new Flower();

        Shape[] shapes = {cycle,flower,cycle,flower};
        for (Shape shape : shapes){
            shape.draw();
        }

        //抽象类虽然不能实例化，但是它可以实现向上转型,然后调用Shape类中的内容
        Shape shape = new Cycle();
        shape.draw();
        shape.name = "1";
    }
}
